草庐IT

javascript var 与这个

全部标签

c++ - 用 C++ : legal or not? 重新解释这个

这是一个有点深奥的问题,但我很好奇以下类扩展模式在现代C++中是否合法(例如,不构成UB)(出于所有意图和目的,我可以将讨论限制在C++17及更高版本)。templatestructAddOne{Tadd_one()const{Tconst&tref=*reinterpret_cast(this);returntref+1;}};templatetypenameE,typenameT>Econst&as(Tconst&obj){returnreinterpret_castconst&>(obj);}autotest(floatx){returnas(x).add_one();}auto

c++ - 一个类的方法中的本地类是这个类的 friend 吗?

我有一个外部类A。它有一个方法A::fun。在这个方法中,它有一个本地或内部类B。我的问题是:B是A的friend吗?我认为不是。这样对吗?如果是这样,我认为让B类成为A的friend是非常有益的,因为B可以访问A's私有(private)和protected成员。而且,由于B在方法中是本地的,其他人无法访问它,因此作为A的友元是安全的。如何让B访问A的私有(private)和protected成员? 最佳答案 不,他们不是friend。但是局部类对函数外部的名称具有与函数本身相同的访问权限。标准说:9.8Localclassdec

c++ - 所有版本的 GCC 都与默认成员初始化器斗争,它捕获了这个,并结合了继承的构造函数

这个故事和我之前的故事相似question.所有支持C++11的GCC版本都具有这种行为。我找不到与我的测试用例有冲突的任何其他编译器。测试用例:structBaseFooWrapper{BaseFooWrapper(intqux){}};structFoo{Foo(BaseFooWrapper&foo):foo(foo){}BaseFooWrapper&foo;};structSomeFooWrapper:publicBaseFooWrapper{usingBaseFooWrapper::BaseFooWrapper;Foofoo{*this};};intmain(){SomeFoo

c++ - 这个使用 <locale> 的简单 C++ 程序是否正确?

此代码似乎在(ubuntu可信)版本的gcc和clang中以及通过mingw在VM上的Win7中工作正常......最近我升级到Wily并且使用clang构建的构建在这里始终崩溃。#include#include#includeintmain(){std::cout有时它是一个乱码字符串,后跟Aborted:Coredumped有时是invalidfree.$./a.outThelocaleis'en_US.UTF-8QX�у�X�у����0�����P�����\�(��\�(��\�(��h��t�������������y���������ț�ԛ�������en_US.UTF

c++ - c++ 中的 setprecision 是否是圆的?如果是这样,为什么我会看到这个?

当我预期为0.29848时,以下代码片段输出0.29847:doublef=0.298475;cout然而,对于其他示例,我观察到四舍五入:doublef=0.123459;cout输出:0.12346和doublef=0.123454;cout输出:0.12345 最佳答案 数字0.298475不能完全用double表示(因为它不是分母为2的幂的分数,即11939/40000),并且实际存储的数字实际上更接近0.29847而不是0.29848。 关于c++-c++中的setprecis

c++ - 这个 "=+"不应该是语法错误吗?

最近我正在尝试使用以下代码:intnumber=4;number+=other_variable;//2...printf("Number:%d\n",number);//-->6但是我输入错误,而是得到了这个代码:intnumber=4;number=+other_variable;//2...printf("Number:%d\n",number);//-->2显然这是用gcc4.7.3和gcc4.4.3编译的,结果是一个普通的赋值运算符。问题是:这不应该是语法错误吗? 最佳答案 否-这被解析为:number=+other_va

c++ - 为什么不允许在非推导上下文中使用基类定义,以及如何解决这个问题?

我有以下代码:#includetemplatestructBase{usingType=int;};templatestructDerived:Base{//uncommmentingthebelowcausecompilererror//usingAlias=Type;};intmain(){Derived::Typeb=1;std::cout现在类型名Type可用于Derived如果它在推导的上下文中-如b的完全有效声明所示.但是,如果我尝试引用Type在Derived的声明中本身,然后我得到一个编译器错误,告诉我Type不命名类型(例如,如果Alias的定义未注释)。我想这与编译

c++ - 为什么 c++ 编译器接受这个初始化?静态整数 x = x;

我刚知道这个:staticintx=x;为什么C++编译器接受这个初始化?我会称之为编译器异常,但有人可能会对此给出一个很好的解释。因此,对于具有静态存储的数据,可以使用自身初始化变量...我已经使用VS2015和VS2017编译器以及其他一些在线C++编译器进行了尝试。 最佳答案 static和非static变量其实是一样的。名称在其声明符之后和初始化之前(如果有的话)立即变得可见。因此在staticintx=x;名称x在第一次出现后立即可见,并且可以在初始化程序中引用。因为它是静态的,所以它的初始值是明确定义的(它是0)。这也是

c++ - 在我的教科书上看不懂这个素数生成器算法

我正在学习编程面试基础,但遇到了一个问题。它是关于编写一个C++函数来查找从1到n的所有质数,对于给定的n。vectorgenerate_primes_from_1_to_n(constint&n){intsize=floor(0.5*(n-3))+1;//is_prime[i]represents(2i+3)isprimeornotvectorprimes;//storestheprimesfrom1tonprimes.push_back(2);vectoris_prime(size,true);for(longi=0;i特别是,我无法理解注释的“从p^2筛选,其索引为2i^2+6i

c++ - 为什么这个程序要交换值?

我有以下代码:#include"stdafx.h"#includeusingnamespacestd;#include#include#includevoidswap(longa,longb){longtemp;temp=a;a=b;b=temp;}int_tmain(intargc,_TCHAR*argv[]){intx=5,y=3;cout程序给出输出:5335程序实际上交换了值!这是为什么?swap()的参数不是指针或引用。(我使用的是VS2005) 最佳答案 你的swap函数根本没有被调用。您包含的其中一个标准库正在拉入,它